package com.dubbo.service.business.user;

import com.dubbo.common.redis.RedisDao;
import com.dubbo.domain.User;
import com.dubbo.domain.dto.UserDto;
import com.dubbo.service.base.BaseService;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

/**
 * 用户
 * @author lihongwu
 * 2018年12月14日 上午10:04:27
 */
public interface UserService extends BaseService<User> {

	/**
	 * 根据微信用户参数创建会员用户
	 *
	 * @author lihongwu
	 * 2018年12月14日 上午10:02:40
	 * @param userDto
	 * @param request
	 * @param response
	 * @return
	 */
	Map<String, Object> registerUserByWechat(UserDto userDto, HttpServletRequest request, HttpServletResponse response);
	
	/**
	 * 将用户数据保存到redis中并将redis中的key返回
	 * 
	 * @author chenwei
	 * @date 2018年4月11日 下午5:03:35
	 * @param request
	 * @param response
	 * @param redisDao
	 * @param user
	 * @return
	 */
	String saveUserByRedis(RedisDao redisDao, User user);
	
	/**
	 * 个人信息
	 *
	 * @author lihongwu
	 * 2018年12月14日 上午10:03:05
	 * @param userId
	 * @return
	 */
	Map<String, Object> personalInformation(String userId);
		
	/**
	 * 修改或者绑定手机号
	 * 修改时加多一个password字段
	 *
	 * @author lihongwu
	 * 2018年12月14日 上午10:03:12
	 * @param request
	 * @param user
	 * @param phone
	 * @param code
	 * @return
	 */
	Map<String, Object> changePhone(HttpServletRequest request, User user,
                                    String phone, String code, String password);
	
	/**
	 * 修改性别
	 *
	 * @author lihongwu
	 * 2018年12月14日 上午10:03:23
	 * @param user
	 * @param sex
	 * @return
	 */
	Map<String, Object> changeSex(User user, Integer sex);
	
	/**
	 * 修改爱好
	 *
	 * @author lihongwu
	 * 2018年12月14日 上午10:03:29
	 * @param user
	 * @param hobbyJson
	 * @return
	 */
	Map<String, Object> changeHobby(User user, String hobbyJson);
	
	/**
	 * 根据用户id获取昵称,微信id,头像路径,钱包余额,红包余额
	 *
	 * @author lihongwu
	 * 2018年12月14日 上午10:04:13
	 * @param userId
	 * @return
	 */
	Map<String,Object> getUserInformation(String userId);
	
	/**
	 * 修改地址
	 *
	 * @author lihongwu
	 * 2018年12月14日 上午10:04:06
	 * @param user
	 * @param addressJson
	 * @return
	 */
	Map<String,Object> changeAddress(User user, String addressJson);

	
	/**
	 * 注册账号
	 *
	 * @author lihongwu
	 * 2018年12月14日 上午10:04:00
	 * @param phone
	 * @param code
	 * @param password
	 * @param repassword
	 * @return
	 * @throws IOException 
	 */
	Map<String, Object> registUser(HttpServletRequest request,
                                   String name, String phone, String code, String password, String repassword, String province, String city, String area, String shopName, String path) throws IOException;
	
	/**
	 * 登录
	 *
	 * @author lihongwu
	 * 2018年12月14日 上午10:03:54
	 * @param phone
	 * @param password
	 * @return
	 * @throws Exception 
	 */
	Map<String,Object> login(String phone, String password, String registrationId) throws Exception;
	
	/**
	 * 修改密码
	 *
	 * @author lihongwu
	 * 2018年12月14日 上午10:03:50
	 * @param user
	 * @param phone
	 * @param code
	 * @param password
	 * @param repassword
	 * @return
	 */
	Map<String, Object> resetPassword(User user, String phone, String code, String password, String repassword);

	/**
	 * 找回密码
	 *
	 * @author lihongwu
	 * 2019年1月3日 上午9:42:32
	 * @param phone
	 * @param code
	 * @param password
	 * @param repassword
	 * @return
	 */
	Map<String, Object> resetPasswordInApp(String phone, String code, String password, String repassword);

	/**
	 * 获取当前用户手机号码
	 * @author wujunyuan
	 * @date 2019年1月2日  下午5:25:58
	 * @param request
	 * @param user
	 * @return
	 */
	Map<String, Object> getUserPhone(HttpServletRequest request, User user);
	
	/**
	 * 注册(小程序端)
	 *
	 * @author lihongwu
	 * 2019年1月4日 上午10:11:19
	 * @param request
	 * @param openId
	 * @param name
	 * @param phone
	 * @param code
	 * @param password
	 * @param repassword
	 * @param province
	 * @param city
	 * @param area
	 * @param shopName
	 * @param path
	 * @return
	 * @throws IOException 
	 */
	Map<String, Object> registInWx(HttpServletRequest request, String openId, String name, String phone, String code,
                                   String password, String repassword, String province, String city, String area, String shopName,
                                   String path) throws IOException;

	/**
	 * 登录(小程序端)
	 *
	 * @author lihongwu
	 * 2019年1月4日 下午3:21:54
	 * @param openId
	 * @param phone
	 * @param password
	 * @return
	 * @throws Exception 
	 */
	Map<String, Object> loginInWx(String openId, String phone, String password) throws Exception;
	
	/**
	 * 修改手机号
	 *
	 * @author lihongwu
	 * 2019年1月3日 上午9:57:55
	 * @param user
	 * @param phone
	 * @param code
	 * @param password
	 * @return
	 */
//	Map<String, Object> resetPhone(User user, String phone, String code, String password);
	
	
}
